Entrar a Agrofy, donde se encuentran los precios pizarra (diferente al oficial, CBOT y MtR) de los principales granos a valor FOB en los principales puertos. El más representativo es el de la bolsa de rosario.
Pasos:
Fecha: ir a mano hasta el 2010. La flecha izquierda tiene que tocarse tantas veces como meses existan de diferencia entre el período base (1/1/2010) hasta la fecha.
Materia prima: todo.
Bolsa: todo.
Moneda: Dolar.
Click en buscar
Descargar la tabla completa.
Una vez extraídos los datos, tengo que hacer una media mensua para comparar la variación interanual.
setwd("./instalacion selenium r") # Inserir caminho
system("java -jar selenium-server-standalone-4.0.0-alpha-1.jar", wait = FALSE) # Declara selenium
system("chromedriver.exe", wait = FALSE) # Declara chromedriver
library(RSelenium)
library(tidyverse)
library(lubridate)
library(rvest)
library(glue)
library(dplyr) #Para calcular la variación mensual
library(jsonlite)
link = "https://news.agrofy.com.ar/granos/series-historicas-pizarra"
eCaps <- list(
chromeOptions =
list(prefs = list("profile.default_content_settings.popups" = 0L,
"download.prompt_for_download" = FALSE,
"directory_upgrade" = TRUE,
"download.default_directory" = getwd() %>% str_replace_all("/", "\\\\"))
)
)
driver <- remoteDriver(remoteServerAddr = "localhost",
browserName = "chrome",
extraCapabilities = eCaps) # Inicia o driver
driver$open() # Abre navegador/browser
driver$navigate(link) # Navega pelo link
driver$maxWindowSize() # Maximiza a janela do navegador
Se cierra solo en 6 segundos aprox.
Abrimos el calendario para elegir el inicio del periodo a consultar
Sys.sleep(10)
date_pickers <- driver$findElements(using = 'css',
value = '.react-datepicker__input-container')
since_date_picker <- date_pickers[[1]]
to_date_picker<- date_pickers[[2]]
since_date_picker$clickElement() #abre datepicker que selecciona inicio de consulta
Ahora tenemos que crear una funcion que, dada una fecha, la elija en el datepicker
auto_datepicker <- function(desde){
# Elige la fecha automáticamente a partir de lo que pasamos como parámtero
#primero debemos saber la fecha de hoy y asi saber como nos tenemos que mover ene eldatepicker
desde <- as.Date(desde)
hoy <- today()
dif_de_meses <- length(seq(from=desde, to=hoy, by='month')) - 1
for (n in 1:dif_de_meses){
#selecciona la flecha de mes
boton_mes_anterior <- driver$findElement(using = 'css',
value='.react-datepicker__navigation--previous')
boton_mes_anterior$clickElement()
}
dia_uno <- driver$findElement(using = 'css',
value='.react-datepicker__day--001')
dia_uno$clickElement()
}
auto_datepicker('2010-01-01')
producto_mercado_dropdown <- driver$findElements(using = 'css',
value = '.dropdown-heading-value')
producto_dropdown <- producto_mercado_dropdown[[1]]
mercado_dropdown<- producto_mercado_dropdown[[2]]
producto_dropdown$clickElement()
producto_todos <- driver$findElement(using = 'css', #Un solo elemento
value = '.select-item')
producto_todos$clickElement()
mercado_dropdown$clickElement()
mercado_todos <- driver$findElement(using = 'css', #Un solo elemento
value = '.select-item')
mercado_todos$clickElement()
moneda_dropdown <- driver$findElement(using = 'css',
value = '#currency')
moneda_dropdown$clickElement()
moneda_option <- driver$findElements(using = 'css',
value = '.option')
moneda_option[[2]]$clickElement()
Buscamos la wea
down <- driver$findElement("css", "body")
down$sendKeysToElement(list(key = "down_arrow"))
down$sendKeysToElement(list(key = "down_arrow"))
buscar <- driver$findElements(using = 'css',
value = '.btn-primary')
buscar[[length(buscar)]]$clickElement()
Sys.sleep(60) #55 en realiad, pero prefiero darle paso
export_csv_button <- driver$findElement(using = 'css',
value = '.csv-export')
export_csv_button$clickElement()
Sys.sleep(5)
serie <- read.csv("./series-historicas-pizarra.csv", sep = ";")
view(serie)
#Limpiamos los datos
serie$Precio <- serie$Precio %>%
str_sub(5L) %>%
as.numeric()
serie$ï..Fecha <- serie$ï..Fecha %>%
as.Date(format = "%d-%m-%y")
serie <- rename(serie, Fecha = ï..Fecha)
#Creamos una variable para ver los
serie <- serie %>%
group_by(Mercado, Producto)%>%
mutate(
Variacion_diaria = (Precio - lag(Precio)) / lag(Precio)
)
# outliers <- serie %>%
# filter(Precio < outliers_limits(serie)[[2]])%>%
# summarise(
# count = n()
# )
#
# outliers
ggplot(data = serie) +
geom_boxplot(mapping = aes(x = Mercado, y = Precio, fill = Mercado)) +
facet_wrap(~ Producto, nrow = 2) +
theme_light()+
theme(legend.position="none")
El gráfico presentado revela información clave.
No hay datos completos para el Sorgo y para el Trigo art.12.
No todos los mercados presentan datos para todos los productos (o directamente no los comercializan). El de Rosario es el más importante.
Los outliers son claros para marcar un límite superior, pero no tanto para el inferior. Se optó por tomar el rango de 45 a 1.000 dólares, descartando el resto.
outliers <- serie %>%
filter(Precio > 1000 | Precio < 45)
outliers
## # A tibble: 10 x 5
## # Groups: Mercado, Producto [7]
## Fecha Mercado Producto Precio Variacion_diaria
## <date> <chr> <chr> <dbl> <dbl>
## 1 2018-09-19 B.Blanca Girasol 27.2 -0.895
## 2 2019-05-28 B.Blanca Girasol 22.6 -0.899
## 3 2020-04-03 B.Blanca Maiz 16.0 -0.897
## 4 2020-11-03 B.Blanca Soja 1233. 3.50
## 5 2018-04-11 Buenos Aires Trigo 2149. 9.08
## 6 2019-05-28 Quequén Girasol 22.4 -0.900
## 7 2019-07-17 Quequén Girasol 24.1 -0.898
## 8 2020-11-03 Quequén Girasol 1233. 3.35
## 9 2020-11-20 Quequén Trigo 12.3 -0.941
## 10 2021-03-25 Rosario Trigo 21.9 -0.898
serie_mask <- serie %>%
filter(between(Precio, 45, 1000))
serie_mensual <- serie_mask %>%
mutate(
mes = month(Fecha),
año = year(Fecha)
) %>%
group_by(Mercado, Producto, año, mes) %>%
summarise(Precio_mensual = mean(Precio))
## `summarise()` has grouped output by 'Mercado', 'Producto', 'año'. You can
## override using the `.groups` argument.
serie_mensual <- serie_mensual %>%
group_by(Mercado, Producto) %>%
mutate(
var_ia = (Precio_mensual - lag(Precio_mensual, 12)) / lag(Precio_mensual, 12))
Por cuestiones de números de datos, se recomienda descartar el “Trigo art. 12”, y todos los mercados, excepto el de rosario.
DT::datatable(serie_mensual,
class = 'cell-border stripe',
extensions = 'Buttons',
options = list(
dom = 'Bfrtip',
buttons = c('copy', 'csv', 'excel', 'pdf', 'print')
))
write_json(serie_mensual, "./agrofy10años.json")
unlink("series-historicas-pizarra.csv")
Facet grid de los precios de todos los productos para el mercado de rosario.